package Set;

/**
 * @author 王艺锡
 * @version 1.0
 */
public class HashSetStructure {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        //HashSet底层机制
        //1.先获取元素的哈希值
        //2.对哈希值进行运算，得出一个索引值，存放在哈希表上的相应位置
        //3.如果该位置上没有其他元素，则直接存放，如果有，则用equals方法判断是否相同，
        // 如果相同，则不再添加，如果不同，则用链表方式添加
        //4.HashSet底层是HashMap，第一次添加时，table扩容到16，
        // 临界值是16*加载因子(0.75)，如果数组使用到了12，就会扩容16*2=32，
        // 新的临界值就是32*0.75=24
        //5.在java8中，如果一条链表的元素个数达到了8个，并且table表的大小m >=64，
        // 就会进行树化(红黑树)，否则将采用数组扩容机制

        //HashSet底层模拟(HashMap)
        Node table[] = new Node[16];
        Node jack = new Node("jack", null);
        table[2] = jack;

        Node tom = new Node("tom", null);
        jack.next = tom;

        Node lihua = new Node("lihua", null);
        tom.next = lihua;

        Node wyx = new Node("wyx", null);
        table[0] = wyx;


    }
}
class Node{
    Object item;
    Node next;

    public Node(Object item, Node next) {
        this.item = item;
        this.next = next;
    }
}
